【发布时间】:2020-10-04 05:39:49
【问题描述】:
我有以下代码来创建 GUI。我遇到的问题是 JTextField 似乎随着 GUI 的大小调整而扩展。
我希望 JTextField 保持与扩大 GUI 相同的大小。 JTextField 似乎也位于控制面板的底部,而不是顶部。我如何控制这个?
有人可以提供一些直升机吗:
public class HtmlDemo extends JPanel
implements ActionListener {
JLabel theLabel;
JTextArea htmlTextArea;
private boolean bLastName = false;
private boolean bNickName = false;
private boolean bMarks = false;
private JFreeChart chart;
private ChartPanel chartPanel;
private JLabel date1Label, date2Label,date3Label,date4Label;
private JTextField date1Field, date2Field,date3Field,date4Field;
private JButton button,button1;
private Container window;
// public createChart stackedChart = new createChart();
public XYPlot plot1;
private JPanel panel, panel1,panel3,panel4;
public HtmlDemo() {
setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
chart = createChart(null);
chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(1060, 370));
chartPanel.setMouseZoomable(true, false);
//panel4.add(chartPanel);
htmlTextArea = new JTextArea(10, 20);
//htmlTextArea.setText(initialText);
JScrollPane scrollPane = new JScrollPane(chartPanel);
theLabel = new JLabel() {
public Dimension getPreferredSize() {
return new Dimension(200, 200);
}
public Dimension getMinimumSize() {
return new Dimension(200, 200);
}
public Dimension getMaximumSize() {
return new Dimension(200, 200);
}
};
theLabel.setVerticalAlignment(SwingConstants.CENTER);
theLabel.setHorizontalAlignment(SwingConstants.CENTER);
JPanel leftPanel = new JPanel();
leftPanel.setLayout(new BoxLayout(leftPanel, BoxLayout.PAGE_AXIS));
leftPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder(
"Rolling Demand"),
BorderFactory.createEmptyBorder(10,10,10,10)));
leftPanel.add(scrollPane);
leftPanel.add(Box.createRigidArea(new Dimension(0,10)));
//leftPanel.add(changeTheLabel);
JPanel rightPanel = new JPanel();
rightPanel.setLayout(new BoxLayout(rightPanel, BoxLayout.PAGE_AXIS));
rightPanel.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createTitledBorder("Controls"),
BorderFactory.createEmptyBorder(10,10,10,10)));
rightPanel.add(theLabel);
button = new JButton();
date1Label = new JLabel("Enter Start Date");
rightPanel.add(date1Label);
date1Field = new JTextField(5);
rightPanel.add(date1Field);
date2Label = new JLabel("Enter End Date");
rightPanel.add(date2Label);
date2Field = new JTextField(5);
rightPanel.add(date2Field);
panel1 = new JPanel();
date3Label = new JLabel("Enter comparator Start Date");
rightPanel.add(date3Label);
date3Field = new JTextField(5);
rightPanel.add(date3Field);
date4Label = new JLabel("Enter comparator End Date");
rightPanel.add(date4Label);
date4Field = new JTextField(5);
rightPanel.add(date4Field);
button.setText("Get Data");
rightPanel.add(button);
setBorder(BorderFactory.createEmptyBorder(10,10,10,10));
add(leftPanel);
add(Box.createRigidArea(new Dimension(10,0)));
add(rightPanel);
}
private JFreeChart createChart(final XYDataset dataset)
{
// System.out.println("hello");
return ChartFactory.createTimeSeriesChart(
"Test",
"Seconds",
"Value",
dataset,
false,
false,
false);
}
//React to the user pushing the Change button.
public void actionPerformed(ActionEvent e) {
theLabel.setText(htmlTextArea.getText());
}
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event dispatch thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("HtmlDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Add content to the window.
frame.add(new HtmlDemo());
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
//Schedule a job for the event dispatch thread:
//creating and showing this application's GUI.
SwingUtilities.invokeLater(new Runnable() {
public void run() {
//Turn off metal's use of bold fonts
UIManager.put("swing.boldMetal", Boolean.FALSE);
createAndShowGUI();
}
});
}
}
【问题讨论】:
-
我希望 JTextField 在 GUI 放大时保持相同的大小。 - 代码中有多个文本字段。 JTextField 似乎也位于控制面板的底部而不是顶部。 - 组件的显示基于布局管理器的规则以及将组件添加到面板的顺序.您发布的代码不是minimal reproducible example,因为您使用的是非标准JDK 类,所以我们看不到您描述的问题。发布适当的“MRE”来展示您的问题。如果您关心的是文本字段,那么 JFreeChart 组件应该无关紧要。
-
对不起,我的问题不清楚。我所有的 JTextFields 都有相同的行为。我希望它们都保持相同的大小(在线表单中看到的典型 JTextField)
-
问题很明确。可能我的回答不清楚。你的问题是关于布局管理器的,但你还没有发布你的minimal reproducible example 来展示你是如何使用布局管理器的。我们不能复制/粘贴/编译和测试发布的代码。由于您的问题仅与文本字段有关,因此“MRE”应删除第 3 方组件并证明您的文本字段存在问题。
-
我想上传问题的快照。 stackexchange 是否允许 .jpeg 上传
-
我们对快照不感兴趣。代码导致了问题。我们需要代码。您已声明您的文本字段有问题。所以发布一个minimal reproducible example 来展示这个问题。创建“MRE”需要 5 分钟。如果您对花 5 分钟创建 MRE 不感兴趣,那么我对提供帮助不感兴趣。如果您会针对您的问题发布适当的 MRE,我敢肯定您已经有了答案。
标签: java swing jtextfield