这与我在这个帖子中提供的问题的答案有关:内部类是轻量级的吗?
我记得从我的阅读中可以看出,如果你只能从一个匿名的内部类创建一个对象,那么,如果你想创建一个ActionListener类并想要从这个类中创建多个对象(不使用反射),不是使用匿名的内部类,而是使用私有的内部类或类的立场,但人们告诉我,我错了.有人可以帮我澄清一下吗?请查看链接,因为它包含更多详细信息,但如果有任何不清楚的地方,请询问!
我在设置布局之前初始化了MotePanel,Command Panel和LEDPanel,那么我是如何得到这个例外的.
请帮忙.
Exception in thread "main" java.awt.AWTError: BoxLayout can't be shared
at javax.swing.BoxLayout.checkContainer(BoxLayout.java:462)
at javax.swing.BoxLayout.invalidateLayout(BoxLayout.java:246)
at javax.swing.BoxLayout.addLayoutComponent(BoxLayout.java:279)
at java.awt.Container.addImpl(Container.java:1107)
at java.awt.Container.add(Container.java:974)
at javax.swing.JFrame.addImpl(JFrame.java:556)
at java.awt.Container.add(Container.java:377)
at Window.<init>(Window.java:54)
Run Code Online (Sandbox Code Playgroud)
public class Window extends JFrame{
private JPanel MotePanel;
private JPanel LEDPanel;
private JPanel CommandPanel;
private JCheckBox motes[];
private JRadioButton Leds[];
public Window(){
this.setLayout(new BoxLayout(this,BoxLayout.X_AXIS));
this.setTitle("Sensor Networks Lab");
this.setSize(300, 200);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
MotePanel = new JPanel();
LEDPanel = new JPanel();
CommandPanel = new JPanel();
motes = new JCheckBox[10];
Leds = new JRadioButton[3];
MotePanel.setLayout(new …Run Code Online (Sandbox Code Playgroud) 根据良好的编程习惯,在程序运行时开始时,应首先创建哪个Controller,Model和View组件,哪些应该创建另外两个?
我的意思是,如果主函数首先创建控制器,那么控制器应该创建模型和视图并以某种方式使它们自己为人所知?
或者我应该开始创建视图,在显示之前,它会初始化控制器,这将创建模型?
或者模型应该先出现?或者它们都应该在main函数中并行创建?实施MVC的正确方法是什么?
编辑:我对一般答案感兴趣,但目前我正在使用Java Swing和Windows Phone 7.
我有一个关于joptionpane的问题.
使用JOptionPane.showMessageDialog(...),我们可以创建一个消息对话框.但是如何以编程方式关闭它呢?
我正在学习通过.NET和JRE框架将源代码转换为机器代码.首先,我做了一些比较两个过程的研究并创建了这个图.我需要一些帮助批评它的正确性,更重要的是添加我错过的任何严肃的事情,以更好地理解编译途径.

一个非常简单的问题.我尝试运行一个非常简单的演示来创建和显示Eclipse的Window Frame,但没有任何反应.没有错误,没有窗口,代码运行完成.
我添加了断点并确保代码按预期运行.代码直接来自Java教程(FrameDemo),我只是将包重命名为适合放置它的位置(此包中的其他代码运行正常):
package ui;
import java.awt.*;
import javax.swing.*;
/* FrameDemo.java requires no other files. */
public class FrameDemo {
/**
* Create the GUI and show it. For thread safety,
* this method should be invoked from the
* event-dispatching thread.
*/
private static void createAndShowGUI() {
//Create and set up the window.
JFrame frame = new JFrame("FrameDemo");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabel emptyLabel = new JLabel("");
emptyLabel.setPreferredSize(new Dimension(175, 100));
frame.getContentPane().add(emptyLabel, BorderLayout.CENTER);
//Display the window.
frame.pack();
frame.setVisible(true);
}
public static void main(String[] …Run Code Online (Sandbox Code Playgroud) 我有两个文件.一个扩展JFrame,另一个扩展JPanel.每当我改变帧的大小时,无论是最大化,拖动还是其他什么,我都希望ScrollPane能够适应帧的当前大小.除此之外,还有一个顶级菜单栏和一个底栏,但为了简单起见,我把它们留了下来.
基本上,我希望它像记事本一样工作.
现在,我在框架上使用ComponentListener,在另一个类中调用setSize方法.setSize方法只是:
public void resize(int x, int y)
{
textA.setPreferredSize(new Dimension(x, y-50));
areaScrollPane.setPreferredSize(new Dimension(x,y-50));
}
Run Code Online (Sandbox Code Playgroud)
另外,供参考:
public void componentResized(ComponentEvent e)
{
textA.resize(panel.getWidth(),panel.getHeight());
}
Run Code Online (Sandbox Code Playgroud)
仅供参考,它扩展了JPanel,因为我将其添加到框架中:
panel = (JPanel) this.getContentPane();
panel.setLayout(new BorderLayout());
panel.add(textA, BorderLayout.CENTER);
Run Code Online (Sandbox Code Playgroud)
那么最好的方法是什么?谢谢!
编辑:这是滚动窗格文件.它在我的主要部分称为textA.
public class TextArea extends JPanel
{
JTextArea textA=new JTextArea(500,500);
JScrollPane areaScrollPane = new JScrollPane(textA);
Toolkit toolkit = Toolkit.getDefaultToolkit ();
Dimension dim = toolkit.getScreenSize();
Dimension dim2=(new Dimension((int)(dim.getWidth()),(int)(dim.getHeight()-120)));
public TextArea()
{
//textA.setLineWrap(true);
//textA.setWrapStyleWord(true);
textA.setEditable(true);
textA.setForeground(Color.WHITE);
textA.setBackground(Color.DARK_GRAY);
this.setFont(null);
areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
areaScrollPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
areaScrollPane.setMinimumSize(new Dimension(300,300));
areaScrollPane.setSize(new Dimension(800,800));
textA.setPreferredSize(dim2);
areaScrollPane.setPreferredSize(dim2);
areaScrollPane.setMaximumSize(dim2);
add(areaScrollPane); …Run Code Online (Sandbox Code Playgroud) 我正在使用具有JTextPane的java创建应用程序.我想能够在enter按下键时(或当用户进入下一行时)执行一些代码.我在网上看了一下,没有找到解决方案.使用C#解决这个问题会更好吗?如果没有,我如何在JTextPane的keyTyped()事件中注册Enter键?如果C#是一个不错的选择,我将如何在C#中执行此操作?
这是我认为可行的解决方案......但没有
//Event triggered when a key is typed
private void keyTyped(java.awt.event.KeyEvent evt) {
int key = evt.getKeyCode();
if (key == KeyEvent.VK_ENTER) {
Toolkit.getDefaultToolkit().beep();
System.out.println("ENTER pressed");
}
}
Run Code Online (Sandbox Code Playgroud)
为什么上面的例子不起作用是因为无论我按哪个键,我得到一个0的keyCode.我更喜欢用Java解决这个问题但是C#也可以工作,也许更好.另外,请尝试用示例而不是链接回答问题(除非您确实需要).谢谢!
我正在尝试学习如何使用Java和JNA(Java Native Access)与Windows API进行交互,但我正处于障碍之中.我试图让鼠标通过在鼠标输入流上排队鼠标事件来做某事,并且代码有效,因为该SendInput(...)方法返回1表示它已成功排队事件,但鼠标本身什么都不做.
我的SSCCE:
编辑:编辑以填写dwFlags字段.我已经尝试了几种常量组合,无论是自己还是比特或组合都没有成功.同样,SendInput方法返回1,因为它应该建议一个正常运行的方法,但鼠标不会让步:
import com.sun.jna.Native;
import com.sun.jna.platform.win32.WinDef.*;
import com.sun.jna.platform.win32.WinUser.*;
import com.sun.jna.win32.StdCallLibrary;
public class MouseUtils {
public interface User32 extends StdCallLibrary {
public static final long MOUSEEVENTF_MOVE = 0x0001L;
public static final long MOUSEEVENTF_VIRTUALDESK = 0x4000L;
public static final long MOUSEEVENTF_ABSOLUTE = 0x8000L;
User32 INSTANCE = (User32) Native.loadLibrary("user32", User32.class);
DWORD SendInput(DWORD dWord, INPUT[] input, int cbSize);
}
public static void main(String[] args) {
INPUT input = new INPUT();
input.type = new DWORD(INPUT.INPUT_MOUSE);
input.input.mi.dx …Run Code Online (Sandbox Code Playgroud)