gpt4 book ai didi

java - 子窗口出现在主窗口的背景中?

转载 作者:行者123 更新时间:2023-12-02 08:50:48 24 4
gpt4 key购买 nike

我有一个问题当我打开主窗口,然后按下出现另一个子窗口(另一个框架)的按钮时,该子窗口出现在主窗口下方(在后台),我必须先隐藏主窗口,然后再隐藏我找到了子窗口。我想要显示任何我想显示的内容,它出现在主窗口上方,而不是下方

Frame f = new Frame();
f.setAlwaysOnTop(true);
f.setSize(1079, 621);
f.setLocationRelativeTo(null);//
f.pack();
f.setVisible(true);

显示绘图的按钮:

private void muBtnActionPerformed(java.awt.event.ActionEvent evt) {                                      
XYDataset dataset = createDatasetManchester(text.getText());

// Create chart
JFreeChart chart = ChartFactory.createXYLineChart("Manchester codage", "", "", dataset, PlotOrientation.VERTICAL, true, true, false);
ChartFrame frame = new ChartFrame("Manchester ", chart);
frame.setSize(1080, 720);

// TODO add your handling code here:
frame.setVisible(true);
frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}

最佳答案

没有代码,很难猜出确切的问题,但是话虽如此,子窗口不应该是另一个 JFrame,而是一个 JDialog,一个基于原始 JFrame 创建的。

如需更详细的答案,请提供相关代码。

另请阅读:The Use of Multiple JFrames, Good/Bad Practice?

<小时/>

编辑:

根据您的代码帖子:Frame f = new Frame();
您似乎正在使用 java.awt.Frame 类并将其与 Swing 类混合。这将导致灾难,因为这将“重量级”(AWT)组件与“轻量级”(Swing)组件混合在一起,您不应该这样做。

例如对话框的使用。请注意,所有代码都可以复制并粘贴到名为 TwoWindowsMain.java

的一个大类中

类(class)包括

  • TwoWindowsMain 类,具有 main 方法并在 Swing 事件线程上启动 GUI
  • FirstWindow 类
    • 它有一个 JFrame 字段 mainFrame,用于显示主 GUI
    • 它还有一个 JButton,在其 ActionListener 中显示第二个窗口
    • 它有一个名为 SecondWindow 的 SecondWindow 字段,显示在上面的 ActionListener 中
  • 保存名为dialogWindow的JDialog的SecondWindow类
    • 构造函数采用 JFrame 参数,该参数将传递到 JDialog 的构造函数中
import java.awt.Dialog.ModalityType;
import java.awt.Dimension;
import javax.swing.*;

public class TwoWindowsMain {
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
new FirstWindow().display();
});
}
}
class FirstWindow {
private JFrame mainFrame;
private SecondWindow secondWindow;

public FirstWindow() {
JButton button = new JButton("Show Second Window");
button.addActionListener(event -> {
if (secondWindow == null) {
secondWindow = new SecondWindow(mainFrame);
}
secondWindow.display();
});

JPanel panel = new JPanel();
panel.setPreferredSize(new Dimension(800, 600));
panel.add(button);

mainFrame = new JFrame("First Window");
mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
mainFrame.add(panel);
mainFrame.pack();
mainFrame.setLocationRelativeTo(null);
}

public void display() {
mainFrame.setVisible(true);
}
}
class SecondWindow {
private JDialog dialogWindow;

public SecondWindow(JFrame frame) {
dialogWindow = new JDialog(frame, "Second Window", ModalityType.MODELESS);
dialogWindow.setPreferredSize(new Dimension(300, 200));
dialogWindow.pack();
dialogWindow.setLocationRelativeTo(frame);
}

public void display() {
dialogWindow.setVisible(true);
}
}
<小时/>

第二次编辑:
关于此代码:

private void muBtnActionPerformed(java.awt.event.ActionEvent evt) {                                      
XYDataset dataset = createDatasetManchester(text.getText());
JFreeChart chart = ChartFactory.createXYLineChart("Manchester codage", "", "", dataset, PlotOrientation.VERTICAL, true, true, false);
ChartFrame frame = new ChartFrame("Manchester ", chart);
frame.setSize(1080, 720);
frame.setVisible(true);
frame.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}

你的问题在这里ChartFrame frame = new ChartFrame("Manchester ", Chart);

您不需要从 JFrame 扩展的 ChartFrame 对象,而是需要一个 ChartPanel,您可以将其放入 JDialog 中,例如:

private void muBtnActionPerformed(java.awt.event.ActionEvent evt) {                                      
XYDataset dataset = createDatasetManchester(text.getText());
JFreeChart chart = ChartFactory.createXYLineChart("Manchester codage", "", "", dataset, PlotOrientation.VERTICAL, true, true, false);
// ChartFrame frame = new ChartFrame("Manchester ", chart);
ChartPanel panel = new ChartPanel(chart);
JDialog dialog = new JDialog(frame, "Manchester", ModalityType.MODELESS)
dialog.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
dialog.add(panel);
dialog.pack();
dialog.setVisible(true);
}

问题在于将什么对象传递到 JFrame 的 JDialog 构造函数(上面称为 frame),这取决于其余代码的创建方式。该变量可能是 this,但我无法确定

关于java - 子窗口出现在主窗口的背景中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60789791/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com