我在java中发现了一个错误,我想知道解决它的最佳方法是什么。
当您创建具有左对齐的JTabbedPane(左侧的选项卡)并且如果您在选项卡中添加图标,则组件的最小大小不正确。
这是一种重现的简单方法:
import java.awt.BorderLayout;
import java.awt.Dimension;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSplitPane;
import javax.swing.JTabbedPane;
public class MinSizeComponent {
// +--------------------------------
// | constructor
// +--------------------------------
// +--------------------------------
// | methods
// +--------------------------------
public void createAndShowGUI() {
System.out.println("createAndShowGUI()");
JFrame.setDefaultLookAndFeelDecorated(true);
JFrame frame = new JFrame("Selection");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// +-----------------------------------------+
// | Gathering |
// +-----------------------------------------+
JPanel panel1 = new JPanel();
panel1.setMinimumSize(new Dimension(100, 99));
panel1.setPreferredSize(new Dimension(150, 99));
JPanel panel2 = new JPanel();
panel2.setMinimumSize(new Dimension(200, 99));
panel2.setPreferredSize(new Dimension(250, 99));
JPanel panel3 = new JPanel();
panel3.setMinimumSize(new Dimension(50, 99));
panel3.setPreferredSize(new Dimension(250, 99));
JPanel panel4 = new JPanel();
panel4.setMinimumSize(new Dimension(150, 99));
panel4.setPreferredSize(new Dimension(250, 99));
//WITH TOP ARRANGEMENT THERE IS NO PROBLEM
//JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.TOP);
//WITH LEFT ARRANGEMENT THE BUG APPEARS
JTabbedPane tabbedPane = new JTabbedPane(JTabbedPane.LEFT);
//WITHOUT ADDING ICON IN THE TABS, THE MIN SIZE OF THE PANEL IS CORRECT: 200
/*
tabbedPane.addTab("PANEL 1", null, panel1, "tip1");
tabbedPane.addTab("PANEL 2", null, panel2, "tip2");
tabbedPane.addTab("PANEL 3", null, panel3, "tip3");
tabbedPane.addTab("PANEL 4", null, panel4, "tip4");
*/
//WITH ICONS IN THE TABS, THE MIN SIZE OF THE PANEL IS INCORRECT: ~285
//SHOULD BE 200 AS WELL!
tabbedPane.addTab("PANEL 1", new ImageIcon("Y:/src/resources/icons/IconUser_32x32.png"), panel1, "tip1");
tabbedPane.addTab("PANEL 2", new ImageIcon("Y:/src/resources/icons/IconUser_32x32.png"), panel2, "tip2");
tabbedPane.addTab("PANEL 3", new ImageIcon("Y:/src/resources/icons/IconUser_32x32.png"), panel3, "tip3");
tabbedPane.addTab("PANEL 4", new ImageIcon("Y:/src/resources/icons/IconUser_32x32.png"), panel4, "tip4");
JPanel rightPanel = new JPanel();
rightPanel.add(new JLabel("label right panel"));
JSplitPane splitPaneHorizontal = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, tabbedPane, rightPanel);
JPanel core = new JPanel(new BorderLayout());
core.add(splitPaneHorizontal, BorderLayout.CENTER);
core.setPreferredSize(new Dimension(500, 500));
//Display the window.
frame.getContentPane().add(core);
frame.pack();
frame.setVisible(true);
}
// +-----------------------------
// | MAIN
// +-----------------------------
public static void main(String[] args) {
MinSizeComponent toto = new MinSizeComponent();
toto.createAndShowGUI();
}
}
只需执行,最多移动左侧的拆分窗格。您可以看到JTabbedPane内容的大小约为285像素。 删除选项卡中的图标:大小变得正确:200像素(这是内部组件最小尺寸的最大值)。
任何人都知道解决问题的最佳方法是什么? 非常感谢,