我正在制作一个有Jmenu的GUI; 它有点击时会做的jmenu项目.那就是问题所在.我看了看,但我找不到如何让它在点击时做点什么.此外,我是一个菜鸟,所以如果你能以一种非常简单的方式做到这一点,那就太棒了!
这是代码:
import java.awt.Color;
import java.awt.Component;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import javax.swing.*;
public abstract class windowMaker extends JFrame implements ActionListener {
private JMenu menuFile;
public static void main(String[] args) {
createWindow();
}
public static void createWindow() {
JFrame frame = new JFrame();
frame.setTitle("*Game Title* Beta 0.0.1");
frame.setSize(600, 400);
frame.setLocation(100, 100);
frame.setVisible(true);
frame.setResizable(false);
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.setJMenuBar(windowMaker.menuBarCreator());
frame.add(windowMaker.setTitle());
}
public static void launchURL(String s) {
String s1 = System.getProperty("os.name");
try {
if (s1.startsWith("Windows")) {
Runtime.getRuntime()
.exec((new StringBuilder())
.append("rundll32 …Run Code Online (Sandbox Code Playgroud) 前段时间我用Java编写了一个小图像查看器/处理程序,如果你愿意的话.
我希望有一个下拉菜单,我可以选择我打开的哪一个图像"在桌面上",即.显示和应用的方法.我希望图像的名称是菜单中显示的JMenuItem的名称.我还想在添加新图像时出现一个新按钮.
我想了一段时间并最终制作了这个解决方案,这是一个新的类,可以在添加图像时处理新按钮的创建.代码如下:
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class ImageList{
private ArrayList<JMenuItem> list;
private ImageHandler main;
private ImageLevel img;
public ImageList() {}
public void setHandler(ImageHandler hand) {
main = hand;
img = main.getImg1();
}
public void add(Buffer addi) {
final String added = addi.getName();
JMenuItem uusi = new JMenuItem(added);
main.getMenu5().add(uusi);
uusi.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
img.setBuffer(added);
main.getScr().updateUI();
}
});
}
}
Run Code Online (Sandbox Code Playgroud)
这应该是正常的.对于这个网站,我把原来的芬兰名字翻译成了英文,想知道为什么我最初用芬兰语写这些名字......我很痴迷于命名.
在程序运行时,应该多次调用方法add.
我无法理解的是ActionListener接口的内部类实现,即它的编译及其工作原理.
如果我的界面上有两个按钮,我希望它们做不同的事情,我需要两个内部类,每个类有一个,每个类都有自己的ActionListener接口的内部实现.但是在我的代码中有一个类似乎可以完成许多工作,一个编译的.class文件,但最终的结果就好像有很多.
有人可以就这个问题教育我吗?这个代码在这里是一个类,新的按钮是它的实例吗?他们是新班吗?每个新按钮应该有一个新的.class文件吗?等等...
我自己,我总是使用ActionListener摇摆事件处理程序(例如按钮单击),它是我在大多数swing应用程序中看到的最常见的监听器.
但是,这里的一些Swing专业人员在stackoverflow中经常建议使用Action而不是ActionListener.这样做有什么好处?
我正在使用本教程使用MVC架构构建应用程序:http://www.oracle.com/technetwork/articles/javase/index-142890.html.但我不确定应该如何或在哪里构建代码并在其中添加JMenuBar的actionListener.
此外,Cay Horstmann的"面向对象设计与模式"一书中说" 控制器可以处理来自窗口系统的鼠标和键盘事件,或者它可能包含用户界面元素,如按钮和菜单. "我应该遵循这个建议,如果是的话,我该如何实施呢?如何将它添加到我的Main类中的JFrame?
我最近开始在Swing中开发一个GUI,以便使用Smack API在java中编写一个简单的XMPP客户端.我遇到的问题是试图弄清楚如何将按钮点击转换为客户端上的操作而不必强制编写意大利面条代码以将所有内容绑定在一起.
是否有任何示例/教程,你知道哪些将显示更复杂的挥杆应用程序,而不是"我看一下按钮在屏幕上"?不幸的是,我的google-fu似乎只返回了这些简单的入门级课程的无数变化.我很乐意接受你知道我可以研究的开源应用程序.即使只是一个像"EventHandlers"这样的话题,也会令人惊叹.
我为我的问题的模糊性道歉,但我觉得在这一点上我只是在谷歌搜索符号.(IE除非你已经知道它所谓的键入google符号是无用的).如果我不清楚请提及哪里,我会尽我所能澄清.谢谢.
我知道这是一个简单的程序JInternalFrame,但它可以用一个可怜的JPanel吗?
我想创建一个看起来像firefox地址栏的textwidget /组件.我的意思是一个Textfield,它允许我在场内放置小按钮(例如取消/重装/ ......)
我尝试通过创建自定义布局管理器来自定义JLayeredPane,该管理器最大化Textfield,并将其余部分从右到左放置.我的问题是这给了绘画问题,我不会总是看到我在文本字段中添加的项目.这可能与Jython有关,我试着提供java.lang.Integer(1)给JLayeredPane.add.然而,层的排序与文档所说的完全相反.
为了实现这个目的,我派生了我自己的JLayeredPane类并重新定义paint了调用paintComponents哪个反过来遍历所有组件并调用他们的paint方法,从文本框开始,其余的后来.
但是我并不总是立即得到更新,这意味着按钮被隐藏/仅部分显示,我无法与按钮交互.
编辑:在我使窗口变小之后,按钮仅显示在正确的位置,之后它也是可点击的
编辑2:我自由地将答案归结为此,隐藏了很多按钮代码/不必要的东西
import java.awt.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.*;
public class playground {
private Icon errorIcon = UIManager.getIcon("OptionPane.errorIcon");
private Icon infoIcon = UIManager.getIcon("OptionPane.informationIcon");
private Icon warnIcon = UIManager.getIcon("OptionPane.warningIcon");
public playground() {
JPanel panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.add(makeButton(), BorderLayout.WEST);
JTextField text = new JTextField(20);
text.setBorder(null);
panel.add(text, BorderLayout.CENTER);
JPanel buttonsPanel = new JPanel();
buttonsPanel.setOpaque(false);
buttonsPanel.setLayout(new GridLayout(1, 2, 2, …Run Code Online (Sandbox Code Playgroud) 我想从文件夹中创建一个包含文件名的列表,并显示该文件夹中存在的具有特定扩展名的所有文件.我希望列表可以选择,以便我可以从列表中选择和删除文件或编辑它.我知道如何从文件夹中选择所有文件,但不知道如何在GUI中显示它.
File folder = new File("c:/");
File[] listOfFiles = folder.listFiles();
Run Code Online (Sandbox Code Playgroud)

如前所述这里在Swing的背景下,GUI的设计使得频繁使用的观察者模式.经常使用中规定的方案EventListenerList,是否有一个Java FX示例,例如Converter,关注模式本身?
我看过其他JLabel线程虽然类似,但有些似乎并不适用于我正在经历的内容.首先,我想说我是Java的新手.接下来,我正在尝试在docs.oracle.com网站上关注教程和演示.现在,当我在JTextField中键入内容时,我可以更新标签,并且有一个ActionListener ...
但我也有一个菜单,当我选择菜单项时,该操作不想更新标签.
问题 -
我可以很容易地在这里复制代码,但它现在很像意大利面条,所以如果你想看到任何东西,请具体告诉我,我会发布它.
我将不胜感激任何人都能提供的帮助.
---编辑---哇!! 感谢所有的意见和建议.
1 - 我知道它必须是我的代码.正如我所提到的,我真的只是从演示和教程中拼凑起来,并尝试沿途学习Java.我从来没有得到面向对象的悬念...... 2 - 我知道个别听众正在工作.我正在使用System.out.println进行验证,以及在调试模式下检查这些标签以确定它们确实已更改.
3 - 我将查看此处发布的各种链接和代码,看看我是否可以弄清楚我的代码有什么问题.
真的,再次感谢!
- -编辑 - -
这是我最初在createAndShowGUI方法中所拥有的....
private static void createAndShowGUI()
{
JFrame frame = new JFrame("Create XML for Photo Gallery");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
CreateGalleryXML window = new CreateGalleryXML();
frame.setJMenuBar(window.createMenuBar());
frame.add(new CreateGalleryXML());
frame.pack();
frame.setVisible(true);
}
Run Code Online (Sandbox Code Playgroud) 我需要Firefox > tools > options使用Java Swing 设计一个类似于(如下所示)的窗口.我必须创建两个顶部标题.点击每个我必须打开tabbedpanes(相同Firefox > tools > options > advanced.我对Swing来说几乎是新手.

感谢您的快速回复.我尝试过这样做.基本窗口是JDialog.我创建了顶部面板的Whithin.工具栏(在topPanel的BorderLayout-North)和内容面板(在topPanel的BorderLayout-Center)添加到此顶部面板中.创建了两个工具栏按钮 - "general"和"advanced",它们是我在上一篇文章中讨论过的标题."contentPanel"是占位符面板.我想在每次点击工具栏按钮时动态添加选项卡式面板.默认为通用.
Whenevr点击了高级工具栏按钮,我想删除_generalTabbedPane并显示_advanceTabbedPane,反之亦然.
但它没有正确发生.单击工具栏按钮时添加和删除/隐藏面板是我需要修复的.我已经附加了下面的代码.
请帮助.
@Override
public JComponent createContentPanel()
{
topPanel = new JPanel();
topPanel.setLayout(new BorderLayout());
JToolBar toolBar = new JToolBar();
toolBar.add(new tabButton("general",GENERAL));
toolBar.add(new tabButton("advanced",ADVANCED));
contentPanel = new JPanel();
contentPanel.add(getGeneralTabs());
topPanel.add(toolBar, BorderLayout.NORTH);
topPanel.add(contentPanel, BorderLayout.CENTER);
return topPanel;
}
private final class JCenterLabel extends JLabel
{
public JCenterLabel(final String s)
{
super(s);
setAlignmentX(Component.CENTER_ALIGNMENT);
}
public JCenterLabel(final Icon i)
{
super(i);
setAlignmentX(Component.CENTER_ALIGNMENT);
}
}
private …Run Code Online (Sandbox Code Playgroud) swing ×11
java ×10
action ×1
awt ×1
javafx ×1
jbutton ×1
jlabel ×1
jlist ×1
jmenu ×1
jmenuitem ×1
jpanel ×1
jtabbedpane ×1
jtextfield ×1
observable ×1
tabpanel ×1