質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.12%

JavaSwingのエラー処理について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 922

meipuru03

score 14

前提・実現したいこと

ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

シンボルが未発見、不適合な型

エラーメッセージ


CalendarTest.java:22シンボルが見つけられません
this.getContentPane.add(loginInstans.getLoginPanel());
シンボル:変数getContentPane
Login.java:22不適合な型:LoginをActionListenerに変換できません
buttondecide.addActionListener(this);

該当のソースコード

ここにご自身が実行したソースコードを書いてください


(CalendarTest.java)
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import javax.swing.text.*;

public class CalendarTest extends JFrame implements ActionListener{
Login loginInstans;
JLabel nowDate;
JButton[][] dateButton;
JTextArea[][] dateArea;
String[] subjectList = {"C言語", "Java", "解析学", "線形代数", "統計学", "計算モデル論", "数値計算の理論と実際", "専門英語", "ドイツ語", "コンピュータ序論", "ハードウェア基礎", "ソフトウェア設計学", "ファイルとデータベース", "OS論", "アルゴリズム論", "会計情報学", "メディアシステム学", "科学技術史", "情報システム基礎論", "統合情報システム学"};

CalendarTest(String title) {
this.setTitle(title);
this.setSize(1280, 960);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
this.addComponentListener(null);
this.getContentPane.add(loginInstans.getLoginPanel());
this.setVisible(true);
}

public JPanel getCalendar() {
JPanel allPanel = new JPanel();
//ページ上部
JButton prevMonth = new JButton("先月");
JButton nextMonth = new JButton("来月");
prevMonth.addActionListener(this);
nextMonth.addActionListener(this);
prevMonth.setActionCommand("prev");
nextMonth.setActionCommand("next");
nowDate = new JLabel("/");
//カレンダーの部分
JPanel calendarPart = new JPanel();
JLabel[] week = new JLabel[7]; {
week[0] = new JLabel("日");
week[1] = new JLabel("月");
week[2] = new JLabel("火");
week[3] = new JLabel("水");
week[4] = new JLabel("木");
week[5] = new JLabel("金");
week[6] = new JLabel("土");
}
dateButton = new JButton[6][7];
dateArea = new JTextArea[6][7];
for(int i = 0; i < 6; i++) {
for(int j = 0; j < 7; j++) {
dateButton[i][j] = new JButton("");
dateArea[i][j] = new JTextArea("");
calendarPart.add(dateButton[i][j]);
calendarPart.add(dateArea[i][j]);
}
}
for(int i = 0; i < 7; i++){
calendarPart.add(week[i]);
}
//教科リストの部分
JPanel subjectPart = new JPanel();
JScrollPane scroll = new JScrollPane(subjectPart);
JButton[] subjectButton = new JButton[20];
for(int i = 0; i < 20; i++) {
subjectButton[i] = new JButton(subjectList[i]);
subjectPart.add(subjectButton[i]);
}
//時間指定の部分
JPanel timePart = new JPanel();
JCheckBox[] timeCheck = new JCheckBox[6];{
timeCheck[0] = new JCheckBox("1時限目");
timeCheck[1] = new JCheckBox("2時限目");
timeCheck[2] = new JCheckBox("3時限目");
timeCheck[3] = new JCheckBox("4時限目");
timeCheck[4] = new JCheckBox("5時限目");
timeCheck[5] = new JCheckBox("希望なし");
}
JButton reloadButton = new JButton("更新");
for(int i = 0; i < 6; i++){
timePart.add(timeCheck[i]);
}
timePart.add(reloadButton);
//ToDoの登録部分
JPanel todoPart = new JPanel();
String[] yearList = {"2015", "2016", "2017","2018", "2019", "2020"};
String[] monthList = {"1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月"};
String[] dayList = {"1日", "2日", "3日", "4日", "5日", "6日", "7日", "8日", "9日", "10日", "11日", "12日", "13日", "14日", "15日", "16日", "17日", "18日", "19日", "20日", "21日", "22日", "23日", "24日", "25日", "26日", "27日", "28日", "29日", "30日", "31日"};
JComboBox yearCombo = new JComboBox(yearList);
JComboBox monthCombo = new JComboBox(monthList);
JComboBox dayCombo = new JComboBox(dayList);
JTextArea todoInput = new JTextArea();
JButton enterButton = new JButton("登録");
enterButton.addActionListener(this);
enterButton.setActionCommand("enter");
todoPart.add(yearCombo);
todoPart.add(monthCombo);
todoPart.add(dayCombo);
todoPart.add(todoInput);
todoPart.add(enterButton);
//申請ボタンと確認ボタン
JPanel buttonPart = new JPanel();
JButton applicationButton = new JButton("申請");
JButton checkButton = new JButton("確認");
applicationButton.addActionListener(this);
checkButton.addActionListener(this);
applicationButton.setActionCommand("app");
checkButton.setActionCommand("check");
buttonPart.add(applicationButton);
buttonPart.add(checkButton);
//レイアウト
calendarPart.setLayout(new GridLayout(1,1));
subjectPart.setLayout(new GridLayout(1,2));
timePart.setLayout(new GridLayout(2,1));
todoPart.setLayout(new GridLayout(2,2));
buttonPart.setLayout(new GridLayout(2,3));
//集約
allPanel.add(calendarPart);
allPanel.add(subjectPart);
allPanel.add(timePart);
allPanel.add(todoPart);
allPanel.add(buttonPart);

getContentPane().add(allPanel,BorderLayout.CENTER);
//returnします
return allPanel;
}

public Boolean isLogin(String inputId, String inputKey) {
try {
File f = new File("a1.txt");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String lines, readId,readKey,inputkey = new String();
Boolean loginFlag = false;
while((lines = br.readLine()) != null) {
String[] lineSplit = lines.split("<>");
readId = lineSplit[0];
readKey = lineSplit[1];
if(inputId.equals(readId)){
if(inputkey.equals(readKey)) {
//成功
loginFlag = true;
break;
}
}
}
return loginFlag;
}catch(IOException ee){
System.out.println(ee);
}
}

public void actionPerformed(ActionEvent e){
String command = e.getActionCommand();
if(command.equals("Login")) {
if(isLogin(loginInstans.userword, loginInstans.password)) {
//ログイン処理
JOptionPane.showMessageDialog(this, "認証に成功しました", "成功", JOptionPane.INFORMATION_MESSAGE);
getContentPane().removeAll();
getContentPane().add(getCalendar());
}else {
JOptionPane.showMessageDialog(this, "認証に失敗しました", "失敗", JOptionPane.INFORMATION_MESSAGE);
loginInstans.pass.setText("");
loginInstans.user.setText("");
}
}
}
}
(Login.java)
//ログイン画面
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

class Login extends JFrame{
JPasswordField user,pass;
String userword,password;

//ログインレイアウト
public Login(String title){
}
public JPanel getLoginPanel() {
JPanel p = new JPanel();
JLabel label1 = new JLabel("ユーザー名を入力\n");
JLabel label2 = new JLabel("パスワードを入力\n");
user = new JPasswordField(10);
pass = new JPasswordField(8);
user.setColumns(15);
pass.setColumns(15); 
JButton buttondecide = new JButton("決定");
buttondecide.addActionListener(this);
buttondecide.setActionCommand("Login");

p.add(label1);
p.add(label2);
p.add(user);
p.add(pass);
p.add(buttondecide);

return p;
Container contentPane = getContentPane();
contentPane.add(p, BorderLayout.CENTER);
}
}

試したこと

課題に対してアプローチしたことを記載してください
Login.javaをCalendarTest.javaに継承

補足情報(言語/FW/ツール等のバージョンなど)

より詳細な情報
これはテキストエディター上でコンパイルしています

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+2

コンパイルエラーですから、指摘された箇所(必要であれば、その周辺も)を修正してください。

CalendarTest.java:22シンボルが見つけられません
this.getContentPane.add(loginInstans.getLoginPanel());
シンボル:変数getContentPane

this(public class CalendarTest extends JFrame implements ActionListenerのオブジェクト)に変数getContentPaneが定義されていない事が原因です。
ちゃんと定義してください。

Login.java:22不適合な型:LoginをActionListenerに変換できません
buttondecide.addActionListener(this);

this(class Login extends JFrameのオブジェクト)は、ActionLister型でないことが原因です。
「引数のthisを、ActionLister型のオブジェクトに変える」
もしくは
「Loginクラスをimplements ActionListenerに変える」
という変更で対処できるかと思われます。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/12 16:41

    回答ありがとうございます。勉強不足でした。基本がわかっていれば容易に解決できるエラーでした。
    再度この基本について復習したいと思います。ありがとうございました

    キャンセル

+1

getContentPaneはメソッドですので、
this.getContentPane()と書かなければエラーになります。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/12 16:12

    ご回答ありがとうございます。その点について修正したところエラーが少なくなりました。ありがとうございます

    キャンセル

  • 2017/09/12 23:55

    どのgetContentPaneへのご指摘かわかりませんが、本質的な原因には当たらないのでは?
    そもそも、thisが省略不可能なメソッドってどんなのでしょう?

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.12%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る