亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

調整 JDialog 和 JTable 列大小時出現問題

調整 JDialog 和 JTable 列大小時出現問題

暮色呼如 2023-07-28 09:54:51
我正在創建一個帶有 的JDialog窗口JTable,并嘗試使其對不同的屏幕尺寸具有“響應性”。由于窗口和表格大小可能會發生變化,我按百分比設置列寬度。此時沒有問題。第一次顯示該表時,一切看起來都很好。一旦表被重新加載(由于修改或其他原因),列的大小看起來會有所不同,但表和窗口的大小仍然相同。這種情況僅在第一次重新加載時發生,然后每次重新加載時所有內容都保持相同的大小。我使用JOptionPane消息對話框在每次加載時顯示表格寬度,然后我發現了問題。第一次加載表時使用不同的大?。↗ScrollPane首選大?。?,然后下一次使用由于調整大小操作而應有的大小。第一次加載(圖片)第二次加載(圖)真正的問題是為什么?我已經嘗試將調整大小代碼移動JDialog到方法上的不同位置initComponents()(創建全局 Dimension 變量),但同樣的情況仍然發生。如果我刪除調整大小的JDialog代碼,一切都會很好,但這是膽怯的方式,哈哈。
查看完整描述

1 回答

?
慕森王

TA貢獻1777條經驗 獲得超3個贊

最初的問題是您initComponents提前調用,即在應用您想要的尺寸之前調用。pack因此,在組件方法中調用initComponents可將面板縮小到最小尺寸。

之后您更改了對話框的大?。ㄍㄟ^調用setSize(w,h)),但這并沒有直接影響所涉及的組件。但是,當對話框設置為visible組件時,組件會自動調整以適合定義的尺寸。這不適用于您的列大小,因為您沒有定義ComponentListener會觸發此操作的列大?。ㄕ垍㈤喯旅娴牡诙€示例)。

update這導致第一次單擊按鈕來考慮組件的調整大小,因此它們被應用到列。

要解決不同大小的問題,請將構造函數中的方法調用更改為
(下面進一步介紹構造函數的完整示例):

int w = (int) (Math.round(d.getWidth()) / 2);

int h = (int) (Math.round(d.getHeight()) / 2);

setPreferredSize(new Dimension(w, h));


initComponents();

setSize(new java.awt.Dimension(0, 0));您可能想從您的方法中刪除initComponents()。


如果您想在用戶手動調整對話框大小時保持列大小,請考慮添加 a?ComponentListener,作為另一個示例,請檢查此answer.

這也可以用作原始代碼的替代解決方案,但首先正確定義大小可能會更清晰。

public Test(Dimension d) {


? ? int w = (int) (Math.round(d.getWidth()) / 2);

? ? int h = (int) (Math.round(d.getHeight()) / 2);

? ? setPreferredSize(new Dimension(w, h));


? ? initComponents();


? ? setLocationRelativeTo(null);

? ? bUpdate.addActionListener(new ActionListener() {

? ? ? ? public void actionPerformed(ActionEvent e) {

? ? ? ? ? ? cargarProductos();

? ? ? ? }

? ? });


? ? this.addComponentListener(new ComponentAdapter() {

? ? ? ? ?@Override

? ? ? ? ?public void componentResized(ComponentEvent e) {

? ? ? ? ? ? ?cargarProductos();

? ? ? ? ?}

? ? });

}


查看完整回答
反對 回復 2023-07-28
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號