[英]JTable Reverts JComboBox and JCheckBox to Values after Selection
[英]JCheckBox messing up JTable's selection
我在Swing應用程序中有一個JTable
。 我有一個JCheckBox
來切換列的可見性。 現在,每當我從表格中選擇一行並將鼠標移到復選框上方時,表格的選擇似乎就會消失。
我還向應用程序中的表添加了ListSelectionListener
。 通常,我在表格中選擇一個單元格時,它將發出兩個更改事件(一個按下鼠標,一個按下鼠標)。 但是,當發生上述怪異現象時,我得到了四個事件。
這是一個產生效果的簡化示例:
import java.awt.BorderLayout;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
public class JTableSelection extends JFrame {
public JTableSelection() {
super("Test");
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {}
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
JTable table = new JTable();
table.setModel(new DefaultTableModel(new String[] { "item", "another",
"one more" }, 3));
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
add(new JCheckBox("Example"), BorderLayout.PAGE_START);
add(new JScrollPane(table), BorderLayout.CENTER);
}
public static void main(String[] args) {
new JTableSelection().setVisible(true);
}
}
為什么選擇會像這樣出現故障(或有人知道)? 我該如何運作?
萬一重要,運行此代碼的Java VM版本為:
java version "1.7.0_67"
Java(TM) SE Runtime Environment (build 1.7.0_67-b01)
Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
編輯。 我發現了這種奇怪的行為。 當最大化幀時,效果將完全消失,並且僅通過重新啟動應用程序才能重新出現。
@不是答案Java7 / Win8
the selection of the table seems to disappear.
-我無法模擬(使用Nimbus L&F應該是一個問題)
mouse_hover_over
JCheckBox.isArmed
JCheckBox.isSelected
。
。
Java1.7.0_67 / Win7_64b
。
。
無論是否在表格周圍使用滾動窗格,代碼在Linux上均可正常運行
我必須同意安德魯的評論:
JTable
放入JScrollPane
或確保您自己按照JTable
教程中所示添加標頭
add(new JCheckBox("Example"), BorderLayout.PAGE_START); JPanel tablePanel = new JPanel(new BorderLayout()); tablePanel.add(table.getTableHeader(), BorderLayout.PAGE_START ); tablePanel.add(table, BorderLayout.CENTER ); add(tablePanel, BorderLayout.CENTER);
也許您需要在JFrame#add(...)
和JFrame#setVisible(true)
之前調用JFrame#pack()
JFrame#setVisible(true)
。
如何制作框架(主窗口)(Java™教程>使用JFC / Swing創建GUI>使用Swing組件)
創建和顯示框架
4.包裝方法調整框架的大小,以使框架中的所有物品均在其首選尺寸以上。 打包的另一種方法是通過調用setSize或setBounds(也設置幀位置)顯式建立幀大小。
在Windows 7 x64上為1.7.0_72
發生相同或相似的事情JButton
+ JScrollPane
+ JTree
:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JTreeSelection extends JFrame {
public JTreeSelection() {
super("Test");
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception e) {}
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLayout(new BorderLayout());
add(new JButton("Example"), BorderLayout.PAGE_START);
add(new JScrollPane(new JTree()), BorderLayout.CENTER);
//pack();
//setSize(320, 240);
}
public static void main(String[] args) {
//You may also need to understand the EDT
//EventQueue.invokeLater(new Runnable() {
// @Override public void run() {
// new JTreeSelection().setVisible(true);
// }
//});
new JTreeSelection().setVisible(true);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.