我GroupLayout用来管理一些动态生成的数据输入表单中的组件.布局或多或少如此:
*-----------------------------------------------*
| label A | field A |
| label B | field B |
| label C | field C |
*-----------------------------------------------*
Run Code Online (Sandbox Code Playgroud)
我使用2个并行组作为水平布局,使用单个顺序组作为垂直布局.在大多数情况下,一切都很好.
我想将标签的最大宽度(仅仅是实例JLabel)限制为父级宽度的1/3 JFrame.如果它JFrame是一个固定的大小,这将是微不足道的,但我必须处理它被调整大小.
我正在接收ComponentListener.componentResized()事件,JFrame但是一旦我收到这样的事件,我就会有点困惑.
我没有运气就试过这种方法:
public void componentResized(ComponentEvent e) {
int maxW = parentFrame.getWidth() / 3;
for (JLabel l : labels) {
l.setMaximumSize( // have also tried setSize() and setPreferredSize()
new Dimension(
Math.min(l.getSize().width, maxW),
l.getMaximumSize().height));
}
groupLayout.invalidateLayout(getContentSpace());
}
Run Code Online (Sandbox Code Playgroud)
任何人都可以建议一种限制标签宽度的方法吗?
我可能每次都可以从头开始重建布局,但我觉得应该有一种更简单的方法.
在netbeans中创建一个新项目时,如果我选择JAVA Desktop应用程序,它会创建一些我根本无法识别的代码,就像我在摇摆中学到的那样.
它导入包如:
org.jdesktop.application.SingleFrameApplication;
Run Code Online (Sandbox Code Playgroud)
另外,main()的声明如下:
public static void main(String[] args) {
launch(DesktopApplication2.class, args);
}
Run Code Online (Sandbox Code Playgroud)
这对我对JFrame,JPanel等的知识没有任何意义.
如果我尝试从头编写netbeans应用程序,我可以编写自己的swing应用程序,但我找不到GUI编辑器.
请帮忙.这真令人沮丧.
如果我创建不可调整大小的JFrame,并启用Windows Aero setLocation似乎没有正确考虑窗口边框.
在下面的代码中,我希望第二帧位于第一帧的右侧,而不是边框重叠.如果禁用Aero,或者我删除了setResizable对此的调用,则按预期完成.
import java.awt.Rectangle;
import javax.swing.JFrame;
public class FrameBorders {
public static void main(String[] args) {
JFrame frame1 = new JFrame("frame 1");
JFrame frame2 = new JFrame("frame 2");
frame1.setResizable(false);
frame2.setResizable(false);
frame1.setVisible(true);
Rectangle bounds = frame1.getBounds();
frame2.setLocation(bounds.x+bounds.width, bounds.y);
frame2.setVisible(true);
}
}
Run Code Online (Sandbox Code Playgroud)
我做错了什么或这是一个错误?如何在没有重叠边框的情况下并排显示2个不可调整的对话框?
编辑:添加了截图(也将frame2更改为JDialog而不是JFrame)
Aero On:

Aero Off:

Aero On但可调整大小:

我试图将组件添加到JPanel,然后将此面板放入JScrollPane,然后将JScrollPane放入JOptionPane.
问题:只添加了19行组件.有一个for循环确定组件的行数,如果将条件计数器更改为19或更小,则将显示所有这些.
这是问题的SSCCE
import java.awt.Dimension;
import javax.swing.GroupLayout;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class DynamicGroupLayout extends JPanel
{
JButton addRecordButton;
JTextField[] FieldsArray;
JLabel[] LabelsArray;
GroupLayout layout;
JScrollPane scrollPane;
public DynamicGroupLayout()
{
addRecordButton = new JButton("add record");
layout = new GroupLayout(this);
this.setLayout(layout);
layout.setAutoCreateGaps(true);
layout.setAutoCreateContainerGaps(true);
scrollPane = new JScrollPane(this);
scrollPane.getVerticalScrollBar().setUnitIncrement(16);
scrollPane.setPreferredSize(this.getPreferredSize());
setTextFields();
showDialog();
}
@Override
public Dimension getPreferredSize()
{
return new Dimension(400, 500);
}
private void setTextFields()
{
int num = 30; //If …Run Code Online (Sandbox Code Playgroud) 所以,我使用的是null布局,但被告知这是一个糟糕的主意,因此决定使用GridBagLayout,因为它被认为是最容易定制的.我在定位我的组件时遇到了麻烦,我真的很困惑我如何在屏幕的顶部中间找到一个标签,我的桌子在中间,我的登录按钮在右下角.有谁知道如何做到这一点?
这是我的代码:
import javafx.geometry.HorizontalDirection;
import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.*;
public class Main
{
JFrame window = new JFrame("PE Fixture"); //JFrame variables
JPanel container = new JPanel();
JPanel guestFixturesPanel = new JPanel();
JPanel loginPanel = new JPanel();
JPanel adminFixturesPanel = new JPanel();
JPanel createPanel = new JPanel();
String[] columns = {"Sport", "Location", "Date", "Result"};
String[][] data = {{"Football", "AQA Highschool", "12.11.13", "5 - 0"},
{"Tennis", "Wembley", "26.11.14.", "TBC"}};
CardLayout cardLayout = new CardLayout();
GridBagConstraints c = new GridBagConstraints(); …Run Code Online (Sandbox Code Playgroud) 我打算为最短路径构建一个GUI.我在for循环中创建了按钮.现在我想更改按下按钮的颜色,但是我收到有关动作侦听器的错误.它说"线程中的异常"主"java.lang.Error:未解决的编译问题:AbstractButton类型中的方法addActionListener(ActionListener)不适用于参数(Final_GUI)".虽然我已经使用JPanel测试了这段代码它在那里工作得很好,但在这里它现在不起作用.我想改变按下的按钮的颜色.如果再次按下该按钮,我想要恢复其先前的颜色.以下是我想做的事情:
.. :(
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JComboBox;
import javax.swing.event.*;
import javax.swing.JFrame;
public class Final_GUI extends JFrame {
JLabel label;
ButtonGroup cbg;
JRadioButton radio_1;
JRadioButton radio_2;
JRadioButton radio_3;
JCheckBox checkbox_1;
JCheckBox checkbox_2;
JCheckBox checkbox_3;
JScrollPane scrollpane_1;
JComboBox combobox_1;
JList list_1;
JScrollPane sp_list_1;
JComboBox combobox_2;
JButton Orange;
JButton Exit;
JLabel for_text;
int check [][]= new int [100][100];
int x=100;
int y=200;
JFrame frame = new JFrame();
JButton[][] buttons = new JButton[x][y];
JPanel mPanel = …Run Code Online (Sandbox Code Playgroud) java ×6
swing ×6
aero ×1
eclipse ×1
grouplayout ×1
jframe ×1
joptionpane ×1
jscrollpane ×1
netbeans ×1
windows ×1