Error :Frames cannot be converted to components?
Error :Frames cannot be converted to components?
我在以下语句中遇到错误
public class project {
JFrame start ;
JButton submit;
JButton cancel ;
JButton fp ;
JTextField username;
JPasswordField pass ;
JLabel uname ;
JLabel pawd ;
project()
{
start = new JFrame("Project");
submit = new JButton("Submit");
cancel = new JButton("Cancel");
fp = new JButton("Forgot Password ?") ;
uname = new JLabel("Username");
pass = new JPasswordField();
pawd = new JLabel("Password");
username = new JTextField();
start.setBounds(300,400,900,900);
start.setResizable(true);
start.setVisible(true);
uname.setBounds(180,200,80,25);
pawd.setBounds(230,225,80,25);
submit.setBounds(250,350,90,25);
cancel.setBounds(3400,350,90,25);
username.setBounds(300,200,100,25);
pass.setBounds(300,230,100,25);
fp.setBounds(420,215,125,25);
start.add(submit);
start.add(cancel);
start.add(fp);
start.add(username);
start.add(pass);
start.add(username);
start.add(uname);
start.add(pawd);
submit.addActionListener(new ActionListener (){
public void actionPerformed(ActionEvent ae){
submitperformed(ae);
}
});
}
public void submitperformed(ActionEvent ae)
{
if((username.getText()).equals("root") && (pass.getPassword().equals("11223344")))
{
start.setVisible(false);
}
else
JOptionPane.showMessageDialog( null,"Wrong Username or Password","Error Mesage", JOptionPane.ERROR_MESSAGE);
}
public void cancelperformed(ActionEvent ae)
{
System.exit(0);
}
public static void main(String []s)
{
project a = new project();
}
}
类型不兼容:框架“项目”无法转换为组件!
我在 What is first argument in 'JOptionPane.showConfirmDialog() here? 收到了类似的问题,但有点太复杂了。
现在,根据我的老师告诉我的,我们将 current class 的对象作为参数来代替我传递它的地方。但是“这个”也能起到作用。那么上面提到的错误是什么意思?
谁能比上面的简单解释一下 link ??
更新:
这就是全部代码。实际上,到目前为止,我还不知道您所说的组件概念。我听过几次。是 class 还是包裹??你能解释一下吗?将不胜感激,当我们应该提供组件参数时,null 是如何工作的??
还有一件事!!
我附上了上述代码结果的快照。忽略按钮和用户名标签。请注意密码 label.Now 这不是我设置边界所依据的位置。无论我设置什么界限,它的位置都不会改变。令人沮丧,我不知道是什么导致了这个问题。这与在设置边界之前添加标签和按钮或类似的东西有关吗?请你仔细看一下,看看发生了什么??
您当前的对象(由 this
参数引用)没有扩展 AWT 或 Swing 组件,这就是为什么您看到的错误与消息中所说的完全一样。这涉及几个问题,包括 1)理解 this
的含义,2)(有时)理解内部 classes 的含义,3)理解方法参数必须是类型或子类型方法声明中参数的类型...
解决方案很简单:确保将对 GUI 组件或 null
的引用传递到该方法的第一个参数中。如果 JOptionPane 被用作另一个主要 window.
的对话框 window,最好避免使用 null
请注意,如果您需要更多帮助,尤其是如果此答案不能解决您的问题,请告诉我们更多关于您的问题并显示更多代码,尤其是 JOptionPane 方法调用周围的代码,还有显示 class 声明,以便我们可以看到您的 class 是什么类型。
使用 Swing 组件作为 JOptionPane 的第一个参数,这里 start
会很好地工作:
JOptionPane.showMessageDialog(start, "Wrong Username or Password","Error Mesage",
JOptionPane.ERROR_MESSAGE);
此外,
- 您的 getPassword() returns 一个字符数组,而不是字符串。您需要 Arrays.equals 进行比较。
- 避免使用 null 布局和 setBounds,因为这会导致难以维护难看的代码(正如您所发现的那样)并且通常会导致难看的 GUI。而是使用布局管理器。
例如使用 GridBagLayout:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.Arrays;
import javax.swing.*;
public class Project2 {
private static final int COLUMN_COUNT = 10;
private static final int I_GAP = 3;
private JTextField userNameField = new JTextField();
private JPasswordField passwordField = new JPasswordField();
private JPanel mainPanel = new JPanel(new GridBagLayout());
public Project2() {
userNameField.setColumns(COLUMN_COUNT);
passwordField.setColumns(COLUMN_COUNT);
GridBagConstraints gbc = getGbc(0, 0, GridBagConstraints.BOTH);
mainPanel.add(new JLabel("User Name:"), gbc);
gbc = getGbc(1, 0, GridBagConstraints.HORIZONTAL);
mainPanel.add(userNameField, gbc);
gbc = getGbc(0, 1, GridBagConstraints.BOTH);
mainPanel.add(new JLabel("Password:"), gbc);
gbc = getGbc(1, 1, GridBagConstraints.HORIZONTAL);
mainPanel.add(passwordField, gbc);
}
public static GridBagConstraints getGbc(int x, int y, int fill) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.insets = new Insets(I_GAP, I_GAP, I_GAP, I_GAP);
gbc.fill = fill;
return gbc;
}
public String getUserName() {
return userNameField.getText();
}
public char[] getPassword() {
return passwordField.getPassword();
}
public JComponent getMainPanel() {
return mainPanel;
}
private static void createAndShowGui() {
Project2 project2 = new Project2();
int input = JOptionPane.showConfirmDialog(null, project2.getMainPanel(),
"Login", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (input == JOptionPane.OK_OPTION) {
if (project2.getUserName().equals("root") &&
Arrays.equals(project2.getPassword(), "11223344".toCharArray())) {
// you're good
} else {
JOptionPane.showMessageDialog(project2.getMainPanel(),
"error message", "Error Title", JOptionPane.ERROR_MESSAGE);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}
我在以下语句中遇到错误
public class project {
JFrame start ;
JButton submit;
JButton cancel ;
JButton fp ;
JTextField username;
JPasswordField pass ;
JLabel uname ;
JLabel pawd ;
project()
{
start = new JFrame("Project");
submit = new JButton("Submit");
cancel = new JButton("Cancel");
fp = new JButton("Forgot Password ?") ;
uname = new JLabel("Username");
pass = new JPasswordField();
pawd = new JLabel("Password");
username = new JTextField();
start.setBounds(300,400,900,900);
start.setResizable(true);
start.setVisible(true);
uname.setBounds(180,200,80,25);
pawd.setBounds(230,225,80,25);
submit.setBounds(250,350,90,25);
cancel.setBounds(3400,350,90,25);
username.setBounds(300,200,100,25);
pass.setBounds(300,230,100,25);
fp.setBounds(420,215,125,25);
start.add(submit);
start.add(cancel);
start.add(fp);
start.add(username);
start.add(pass);
start.add(username);
start.add(uname);
start.add(pawd);
submit.addActionListener(new ActionListener (){
public void actionPerformed(ActionEvent ae){
submitperformed(ae);
}
});
}
public void submitperformed(ActionEvent ae)
{
if((username.getText()).equals("root") && (pass.getPassword().equals("11223344")))
{
start.setVisible(false);
}
else
JOptionPane.showMessageDialog( null,"Wrong Username or Password","Error Mesage", JOptionPane.ERROR_MESSAGE);
}
public void cancelperformed(ActionEvent ae)
{
System.exit(0);
}
public static void main(String []s)
{
project a = new project();
}
}
类型不兼容:框架“项目”无法转换为组件!
我在 What is first argument in 'JOptionPane.showConfirmDialog() here? 收到了类似的问题,但有点太复杂了。 现在,根据我的老师告诉我的,我们将 current class 的对象作为参数来代替我传递它的地方。但是“这个”也能起到作用。那么上面提到的错误是什么意思? 谁能比上面的简单解释一下 link ??
更新:
这就是全部代码。实际上,到目前为止,我还不知道您所说的组件概念。我听过几次。是 class 还是包裹??你能解释一下吗?将不胜感激,当我们应该提供组件参数时,null 是如何工作的??
还有一件事!!
我附上了上述代码结果的快照。忽略按钮和用户名标签。请注意密码 label.Now 这不是我设置边界所依据的位置。无论我设置什么界限,它的位置都不会改变。令人沮丧,我不知道是什么导致了这个问题。这与在设置边界之前添加标签和按钮或类似的东西有关吗?请你仔细看一下,看看发生了什么??
您当前的对象(由 this
参数引用)没有扩展 AWT 或 Swing 组件,这就是为什么您看到的错误与消息中所说的完全一样。这涉及几个问题,包括 1)理解 this
的含义,2)(有时)理解内部 classes 的含义,3)理解方法参数必须是类型或子类型方法声明中参数的类型...
解决方案很简单:确保将对 GUI 组件或 null
的引用传递到该方法的第一个参数中。如果 JOptionPane 被用作另一个主要 window.
请注意,如果您需要更多帮助,尤其是如果此答案不能解决您的问题,请告诉我们更多关于您的问题并显示更多代码,尤其是 JOptionPane 方法调用周围的代码,还有显示 class 声明,以便我们可以看到您的 class 是什么类型。
使用 Swing 组件作为 JOptionPane 的第一个参数,这里 start
会很好地工作:
JOptionPane.showMessageDialog(start, "Wrong Username or Password","Error Mesage",
JOptionPane.ERROR_MESSAGE);
此外,
- 您的 getPassword() returns 一个字符数组,而不是字符串。您需要 Arrays.equals 进行比较。
- 避免使用 null 布局和 setBounds,因为这会导致难以维护难看的代码(正如您所发现的那样)并且通常会导致难看的 GUI。而是使用布局管理器。
例如使用 GridBagLayout:
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.util.Arrays;
import javax.swing.*;
public class Project2 {
private static final int COLUMN_COUNT = 10;
private static final int I_GAP = 3;
private JTextField userNameField = new JTextField();
private JPasswordField passwordField = new JPasswordField();
private JPanel mainPanel = new JPanel(new GridBagLayout());
public Project2() {
userNameField.setColumns(COLUMN_COUNT);
passwordField.setColumns(COLUMN_COUNT);
GridBagConstraints gbc = getGbc(0, 0, GridBagConstraints.BOTH);
mainPanel.add(new JLabel("User Name:"), gbc);
gbc = getGbc(1, 0, GridBagConstraints.HORIZONTAL);
mainPanel.add(userNameField, gbc);
gbc = getGbc(0, 1, GridBagConstraints.BOTH);
mainPanel.add(new JLabel("Password:"), gbc);
gbc = getGbc(1, 1, GridBagConstraints.HORIZONTAL);
mainPanel.add(passwordField, gbc);
}
public static GridBagConstraints getGbc(int x, int y, int fill) {
GridBagConstraints gbc = new GridBagConstraints();
gbc.gridx = x;
gbc.gridy = y;
gbc.gridwidth = 1;
gbc.gridheight = 1;
gbc.weightx = 1.0;
gbc.weighty = 1.0;
gbc.insets = new Insets(I_GAP, I_GAP, I_GAP, I_GAP);
gbc.fill = fill;
return gbc;
}
public String getUserName() {
return userNameField.getText();
}
public char[] getPassword() {
return passwordField.getPassword();
}
public JComponent getMainPanel() {
return mainPanel;
}
private static void createAndShowGui() {
Project2 project2 = new Project2();
int input = JOptionPane.showConfirmDialog(null, project2.getMainPanel(),
"Login", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE);
if (input == JOptionPane.OK_OPTION) {
if (project2.getUserName().equals("root") &&
Arrays.equals(project2.getPassword(), "11223344".toCharArray())) {
// you're good
} else {
JOptionPane.showMessageDialog(project2.getMainPanel(),
"error message", "Error Title", JOptionPane.ERROR_MESSAGE);
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
});
}
}